package lang;


import java.util.ArrayList;
import java.util.List;

import util.StringHelper;

/**
 * <描述> 多文件对象
 * 
 */
public class MultiFile implements java.io.Serializable, Cloneable {
	private static final long serialVersionUID = 1L;
	private static final String SEPARATOR = ",";
	private final List<FileBean> files = new ArrayList<FileBean>();

	public MultiFile() {
	}

	/**
	 * <构造函数> 构造文件对象，通过字符串 <br>
	 * 字符串的格式： <br>
	 * fileName|name|size|isUploadToPortal|isSimple|id|CREATE|channel,fileName|name|size|isUploadToPortal|channel|isSimple|id|DELETE|channel <br>
	 * 页面上的ID为页面中使用的，若从数据库中读取，则没有这个ID <br>
	 * 删除和新增标识为区分是否删除当前文件，还是新增当前文件，值为CREATE/DELETE
	 * 
	 * @param text
	 */
	public MultiFile(String text) {
		if (StringHelper.hasLength(text)) {
			String[] args = text.split(SEPARATOR);
			for (int i = 0; i < args.length; i++) {
				files.add(new FileBean(args[i]));
			}
		}
	}

	/**
	 * <方法描述>
	 * 文件存放值，格式见上
	 * 
	 * @return
	 */
	public String getValue() {
		StringBuilder sb = new StringBuilder();
		for (FileBean bean : files) {
			if (sb.length() > 0) {
				sb.append(SEPARATOR);
			}
			if (!bean.isDelete())
				sb.append(bean.getValue());
		}
		return sb.toString();
	}

	/**
	 * <方法描述> 获取所有文件对象的集合
	 * 
	 * @return
	 */
	public List<FileBean> getFiles() {
		return files;
	}

	/**
	 * <方法描述> 获取第一个文件对象，对象只能保存一个文件的字段有用，若存在，返回第一个文件对象，否则返回null
	 * 
	 * @return
	 */
	public FileBean getFirstFileBean() {
		FileBean bean = null;
		if (!files.isEmpty()) {
			bean = files.get(0);
		}
		return bean;
	}

	/**
	 * <方法描述> 获取文件的个数
	 * 
	 * @return 文件个数
	 */
	public int size() {
		return files.size();
	}

	/**
	 * <方法描述> 获取指定的文件路径，若不存在，则返回null
	 * 
	 * @param index
	 *            文件的序号
	 * @return 文件的路径，不包含服务器存放的绝对路径
	 */
	public String getFilePath(int index) {
		if (index < size()) {
			return files.get(index).getFileName();
		}
		return null;
	}

	/**
	 * <方法描述> 获取指定的文件名称，若不存在，则返回null
	 * 
	 * @param index
	 *            文件的序号
	 * @return 文件名称，显示的中文名
	 */
	public String getFileCname(int index) {
		if (index < size()) {
			return files.get(index).getRealName();
		}
		return null;
	}

	/**
	 * <方法描述> 获取指定的文件的大小，若不存在，则返回null
	 * 
	 * @param index
	 *            文件的序号
	 * @return 文件大小，单位为byte
	 */
	public long getFileSize(int index) {
		if (index < size()) {
			return files.get(index).getSize();
		}
		return new Long(0);
	}
}
